当Worker
/Task
进程发生异常后会在Manager
进程内回调此函数。
void onWorkerError(swoole_server $serv, int $worker_id, int $worker_pid, int $exit_code, int $signal);
$worker_id
是异常进程的编号$worker_pid
是异常进程的ID
$exit_code
退出的状态码,范围是0~255
$signal
进程退出的信号
此函数主要用于报警和监控,一旦发现Worker
进程异常退出,那么很有可能是遇到了致命错误或者进程CoreDump
。通过记录日志或者发送报警的信息来提示开发者进行相应的处理。
signal = 11
:说明Worker
进程发生了segment fault
段错误,可能触发了底层的BUG
,请收集core dump
信息和valgrind
内存检测日志,向我们反馈此问题exit_code = 255
:说明Worker
进程发生了Fatal Error
致命错误,请检查PHP
的错误日志,找到存在问题的PHP
代码,进行解决signal = 9
:说明Worker
被系统强行Kill
,请检查是否有人为的kill -9
操作,检查dmesg
信息中是否存在OOM
(Out of memory
)- 如果存在
OOM
,分配了过大的内存。检查Server
的setting
配置,是否创建了非常大的Swoole\Table
、Swoole\Buffer
等内存模块